\section{9. Transaktioner herunder ACID egenskaber samt låse og låsning}
\begin{center}
\line(1,0){500}
\end{center}

\subsection{ACID egenskaber}
\begin{itemize}

    \item Atomicity
    \begin{itemize}
        \item All or nothing, enten lykkedes hele transaktionen, eller den fejler
    \end{itemize}
    
    \item Consistency
    \begin{itemize}
        \item Transaktionen vil bringe databasen fra en gyldig state til en anden gyldig state
        \item Alle definerede regler skal overholdes(herunder constraints, cascades, triggers)
    \end{itemize}
    
    \item Isolation
    \begin{itemize}
        \item Resultatet af en transaktion skal være den samme som hvis transaktioner blev eksekveret serielt
        \item Hvis to transaktioner sker samtidigt, vil de ikke kende til hinanden eller ændre hinandens data
    \end{itemize}
    
    \item Durability    
    \begin{itemize}
        \item Når en transaktion er committet, vil den altid være det, også ved f.eks. strømsvigt
    \end{itemize}
    
\end{itemize}

\subsection{Transaktion Syntax}
\begin{lstlisting}
BEGIN TRAN T1
	WITH MARK 'Doing something useful';
UPDATE table1 ...;
COMMIT TRAN T1;
\end{lstlisting}

\subsection{Scenarie: Tabt data}
\begin{tabular}{| c | c | c | c | c |}
\hline
Tid & Transaktion A & TOTAL & Transaktion B & BALANCE \\ \hline
t1 & & & BALANCE:=Read(X) & 20 \\ \hline
t2 & TOTAL = Read(X) & 20 & &  \\ \hline
t3 & TOTAL += 10 & 30 & &  \\ \hline
t4 & WRITE(TOTAL, X) & 30 & &  \\ \hline
t5 & & & BALANCE = BALANCE * 110\% & 22 \\ \hline
t6 & & & WRITE(BALANCE, X) & 22 \\ \hline
\end{tabular}
Løsningen vil være locking\\

\subsection{Scenarie: Dead lock}

\begin{tabular}{| c | c | c | c | c |}
\hline
Tid & Transaktion A & Transaktion B & Låsestatus X & Låsestatus Y \\ \hline

t1 & WRITE(p, X) & & A & \\ \hline
t2 & & WRITE(p, Y) & A & B \\ \hline
t3 & READ(Y) - WAIT & & A & B \\ \hline
t4 & WAIT & READ(X) - WAIT & A & B \\ \hline
t5 & WAIT & WAIT & A & B\\ \hline
\end{tabular}\\

DBMS kan løse en deadlock ved at tvunge den yngste transaktion til at gennemføre et rollback\\
\textbf{Two-phased locking:}\\
\begin{itemize}
    \item Phase 1: Growing phase, antallet af låse kan kun øges
    \item Phase 2: Shrinking phase, antallet af låse kan kun mindskes
\end{itemize}

